package co.edu.usbcali.hibernate.managebean;

import java.util.ArrayList;
import java.util.List;

import javax.faces.event.ActionEvent;
import javax.faces.event.ValueChangeEvent;
import javax.faces.model.SelectItem;

import co.edu.usbcali.hibernate.logica.ClienteLogica;
import co.edu.usbcali.hibernate.logica.IClienteLogica;
import co.edu.usbcali.hibernate.logica.IMascotaLogica;
import co.edu.usbcali.hibernate.logica.MascotaLogica;
import co.edu.usbcali.hibernate.modelo.Clientes;
import co.edu.usbcali.hibernate.modelo.Mascotas;
import co.edu.usbcali.hibernate.utilidades.FacesUtils;
import co.edu.usbcali.hibernate.utilidades.Utilities;

import com.icesoft.faces.component.ext.HtmlCommandButton;
import com.icesoft.faces.component.ext.HtmlInputText;
import com.icesoft.faces.component.ext.HtmlOutputText;
import com.icesoft.faces.component.ext.HtmlSelectOneMenu;


public class MascotaView {
	
	private HtmlOutputText lblCodigo;
	private HtmlInputText txtCodigo;
	private HtmlOutputText lblNombre;
	private HtmlInputText txtNombre;
	private HtmlOutputText lblEdad;
	private HtmlInputText txtEdad;
	private HtmlOutputText lblClientes;
	private HtmlSelectOneMenu cmbClientes;
	private HtmlCommandButton btnGuardar;
	private HtmlCommandButton btnModificar;
	private HtmlCommandButton btnLimpiar;
	private HtmlCommandButton btnEliminar;
	private HtmlCommandButton btnSalir;
	private HtmlCommandButton btnAceptar;
	private List<SelectItem> clientes2 = new ArrayList<SelectItem>();
	private List<Clientes> clientes;
	private boolean pnuVisible;
	
	
	public HtmlCommandButton getBtnAceptar() {
		return btnAceptar;
	}
	public void setBtnAceptar(HtmlCommandButton btnAceptar) {
		this.btnAceptar = btnAceptar;
	}
	public boolean isPnuVisible() {
		return pnuVisible;
	}
	public void setPnuVisible(boolean pnuVisible) {
		this.pnuVisible = pnuVisible;
	}
	
	
	
	public MascotaView() {
		try {
			ClienteLogica clienteLogica = new ClienteLogica();
			clientes = clienteLogica.consultarClientes();
			SelectItem item = new SelectItem(0,"Seleccione un cliente");
			clientes2.add(item);
			for (Clientes cliente : clientes) {
				item = new SelectItem(cliente.getCliCedula(), cliente.getCliNombre());
				clientes2.add(item);
			}
			
		} catch (Exception e) {
			e.printStackTrace();
		}
		 
	}
	public List<SelectItem> getClientes2() {
		return clientes2;
	}
	public void setClientes2(List<SelectItem> clientes2) {
		this.clientes2 = clientes2;
	}
	public List<Clientes> getClientes() {
		return clientes;
	}
	public void setClientes(List<Clientes> clientes) {
		this.clientes = clientes;
	}
	public HtmlOutputText getLblCodigo() {
		return lblCodigo;
	}
	public void setLblCodigo(HtmlOutputText lblCodigo) {
		this.lblCodigo = lblCodigo;
	}
	public HtmlInputText getTxtCodigo() {
		return txtCodigo;
	}
	public void setTxtCodigo(HtmlInputText txtCodigo) {
		this.txtCodigo = txtCodigo;
	}
	public HtmlOutputText getLblNombre() {
		return lblNombre;
	}
	public void setLblNombre(HtmlOutputText lblNombre) {
		this.lblNombre = lblNombre;
	}
	public HtmlInputText getTxtNombre() {
		return txtNombre;
	}
	public void setTxtNombre(HtmlInputText txtNombre) {
		this.txtNombre = txtNombre;
	}
	public HtmlOutputText getLblEdad() {
		return lblEdad;
	}
	public void setLblEdad(HtmlOutputText lblEdad) {
		this.lblEdad = lblEdad;
	}
	public HtmlInputText getTxtEdad() {
		return txtEdad;
	}
	public void setTxtEdad(HtmlInputText txtEdad) {
		this.txtEdad = txtEdad;
	}
	public HtmlOutputText getLblClientes() {
		return lblClientes;
	}
	public void setLblClientes(HtmlOutputText lblClientes) {
		this.lblClientes = lblClientes;
	}
	public HtmlSelectOneMenu getCmbClientes() {
		return cmbClientes;
	}
	public void setCmbClientes(HtmlSelectOneMenu cmbClientes) {
		this.cmbClientes = cmbClientes;
	}
	public HtmlCommandButton getBtnGuardar() {
		return btnGuardar;
	}
	public void setBtnGuardar(HtmlCommandButton btnGuardar) {
		this.btnGuardar = btnGuardar;
	}
	public HtmlCommandButton getBtnModificar() {
		return btnModificar;
	}
	public void setBtnModificar(HtmlCommandButton btnModificar) {
		this.btnModificar = btnModificar;
	}
	public HtmlCommandButton getBtnLimpiar() {
		return btnLimpiar;
	}
	public void setBtnLimpiar(HtmlCommandButton btnLimpiar) {
		this.btnLimpiar = btnLimpiar;
	}
	public HtmlCommandButton getBtnEliminar() {
		return btnEliminar;
	}
	public void setBtnEliminar(HtmlCommandButton btnEliminar) {
		this.btnEliminar = btnEliminar;
	}
	public HtmlCommandButton getBtnSalir() {
		return btnSalir;
	}
	public void setBtnSalir(HtmlCommandButton btnSalir) {
		this.btnSalir = btnSalir;
	}
	
	public void limpiar_action(ActionEvent e) {
		txtCodigo.setValue("");
		txtEdad.setValue("");
		txtNombre.setValue("");
		cmbClientes.setValue(0);
		txtCodigo.setDisabled(false);
		btnGuardar.setDisabled(false);
        btnEliminar.setDisabled(true);
        btnModificar.setDisabled(true);
        btnLimpiar.setDisabled(false);

	}

	public void guardar_action(ActionEvent e) throws Exception {

		try {
			if (!Utilities.isNumeric(txtCodigo.getValue().toString())){
				throw new Exception("El codigo debe ser numerico");
			}
			Long masCodigo = Long.parseLong(txtCodigo.getValue().toString());
			if (!Utilities.isOnlyLetters(txtNombre.getValue().toString())){
				throw new Exception("El nombre debe contener solo letras");
			}
			String masNombre = txtNombre.getValue().toString();
			if (!Utilities.isNumeric(txtEdad.getValue().toString())){
				throw new Exception("La edad debe ser numerica");
			}
			Long masEdad = Long.parseLong(txtEdad.getValue().toString());
			Long masCliente = Long.parseLong(cmbClientes.getValue().toString());
			IClienteLogica clienteLogica = new ClienteLogica();
			Clientes clientes = clienteLogica.consultarClientePorId(masCliente);
			IMascotaLogica mascotaLogica = new MascotaLogica();
			mascotaLogica.crearMascotas(masCodigo, clientes, masNombre, masEdad);
			txtCodigo.setValue("");
			txtEdad.setValue("");
			txtNombre.setValue("");
			cmbClientes.setValue(0);
			txtCodigo.setDisabled(false);
			btnGuardar.setDisabled(false);
	        btnEliminar.setDisabled(true);
	        btnModificar.setDisabled(true);
	        btnLimpiar.setDisabled(false);
		} catch (Exception e2) {
			FacesUtils.addErrorMessage(e2.getMessage());
			pnuVisible = true;
		}

	}

	public void modificar_action(ActionEvent e) throws Exception {
		
		try {
			if (!Utilities.isNumeric(txtCodigo.getValue().toString())){
				throw new Exception("El codigo debe ser numerico");
			}
			Long masCodigo = Long.parseLong(txtCodigo.getValue().toString());
			if (!Utilities.isOnlyLetters(txtNombre.getValue().toString())){
				throw new Exception("El nombre debe contener solo letras");
			}
			String masNombre = txtNombre.getValue().toString();
			if (!Utilities.isNumeric(txtEdad.getValue().toString())){
				throw new Exception("La edad debe ser numerica");
			}
			Long masEdad = Long.parseLong(txtEdad.getValue().toString());
			Long masCliente = Long.parseLong(cmbClientes.getValue().toString());
			IClienteLogica clienteLogica = new ClienteLogica();
			Clientes clientes = clienteLogica.consultarClientePorId(masCliente);
			IMascotaLogica mascotaLogica = new MascotaLogica();
			mascotaLogica.modificarMascotas(masCodigo, clientes, masNombre, masEdad);
			txtCodigo.setValue("");
			txtEdad.setValue("");
			txtNombre.setValue("");
			cmbClientes.setValue(0);
			txtCodigo.setDisabled(false);
			btnGuardar.setDisabled(false);
	        btnEliminar.setDisabled(true);
	        btnModificar.setDisabled(true);
	        btnLimpiar.setDisabled(false);
		} catch (Exception e2) {
			FacesUtils.addErrorMessage(e2.getMessage());
			pnuVisible = true;
		}
	}

	public void eliminar_action(ActionEvent e) throws Exception {
		
		try {
				if (!Utilities.isNumeric(txtCodigo.getValue().toString())){
					throw new Exception("El codigo debe ser numerico");
				}
				Long masCodigo = Long.parseLong(txtCodigo.getValue().toString());
				if (!Utilities.isOnlyLetters(txtNombre.getValue().toString())){
					throw new Exception("El nombre debe contener solo letras");
				}
				String masNombre = txtNombre.getValue().toString();
				if (!Utilities.isNumeric(txtEdad.getValue().toString())){
					throw new Exception("La edad debe ser numerica");
				}
				Long masEdad = Long.parseLong(txtEdad.getValue().toString());
				
				Long masCliente = Long.parseLong(cmbClientes.getValue().toString());
				IClienteLogica clienteLogica = new ClienteLogica();
				Clientes clientes = clienteLogica.consultarClientePorId(masCliente);
				IMascotaLogica mascotaLogica = new MascotaLogica();
				mascotaLogica.borrarMascotas(masCodigo, clientes, masNombre, masEdad);
				txtCodigo.setValue("");
				txtEdad.setValue("");
				txtNombre.setValue("");
				cmbClientes.setValue(0);
				txtCodigo.setDisabled(false);
				btnGuardar.setDisabled(false);
		        btnEliminar.setDisabled(true);
		        btnModificar.setDisabled(true);
		        btnLimpiar.setDisabled(false);
			} catch (Exception e2) {
				FacesUtils.addErrorMessage(e2.getMessage());
				pnuVisible = true;
			}
		
		
	}

	public String salir_action() throws Exception {
		return "menu";
	}
	
	public void listener_txtCod(ValueChangeEvent event){
		 if ((event.getNewValue() != null) && !event.getNewValue().equals("")) {
	            Mascotas entity = null;

	            try {
	            	if (!Utilities.isNumeric(txtCodigo.getValue().toString())){
	    				throw new Exception("La cedula debe ser numerica");
	    			}
	                Long masCodigo = new Long(txtCodigo.getValue().toString());
	                IMascotaLogica mascotaLogica = new MascotaLogica();	                
	                entity =  mascotaLogica.consultarMascotaPorId(masCodigo); 
	            } catch (Exception e) {
	            	FacesUtils.addErrorMessage(e.getMessage());
	    			pnuVisible = true;
	            }

	            if (entity == null) {
	                btnGuardar.setDisabled(false);
	                btnEliminar.setDisabled(true);
	                btnModificar.setDisabled(true);
	                btnLimpiar.setDisabled(false);
	            } else {
	                txtEdad.setValue(entity.getMasEdad());
	                txtEdad.setDisabled(false);
	                txtNombre.setValue(entity.getMasNombre());
	                txtNombre.setDisabled(false);
	                cmbClientes.setValue(entity.getClientes().getCliCedula());
	                cmbClientes.setDisabled(false);
	                txtCodigo.setDisabled(true);
	                btnGuardar.setDisabled(true);
	                btnEliminar.setDisabled(false);
	                btnModificar.setDisabled(false);
	                btnLimpiar.setDisabled(false);
	            }
	        }
	}
	public void aceptar_action(ActionEvent e) throws Exception {
		pnuVisible = false;
	}
	
}
